/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package rna;

import java.util.ArrayList;

/**
 *
 * @author Leonardo
 */
public class Gradiente {
        
        ArrayList<Camadas> arrayCamadas = new ArrayList<Camadas>();
            
        public Gradiente (ArrayList<Camadas> array){
        arrayCamadas = array;
        
    }



        public void GradienteCamadaSaida(Neuronio neuronio, double saidadesejada)
        {
            double gradienteLocal = 0.0;


            gradienteLocal = (saidadesejada - neuronio.getSaida())* derivadaSigmoide(neuronio.calcularSaida());

            neuronio.setGradienteLocal(gradienteLocal);
        }
            // vou ver essa função
        public void GradienteCamadasAnteriores (Neuronio neuronio,Camadas camadaFrente, int posicaoNeurinioCamada)
        {

            double gradienteLocal = 0.0;
            double somatorio = 0.0;

            // passar por todos os neuronios da camada que foi passada como parametro --> tamanho = numero de neuronios da camada
            for (int i=0; i < camadaFrente.getNeuronios().size(); i++ ){
                // erro pq o segundo termo eh um arraylist ai buga a mutliplicação
                
                somatorio = somatorio + camadaFrente.getNeuronios().get(i).getgradienteLocal() * camadaFrente.getNeuronios().get(i).getPesos().get(posicaoNeurinioCamada);
                //somatorio = somatorio + camadaFrente.getNeuronios().get(i).getgradienteLocal() * camadaFrente.getNeuronios().get(i).getPesos()[posicaoNeurinioCamada];

      //                   somador = somador + camadaPosterior.getCamada().get(i).getgradienteLocal()*camadaPosterior.getCamada().get(i).getPesos()[iteracao];
            }

            gradienteLocal = derivadaSigmoide(neuronio.calcularSaida());
            neuronio.setGradienteLocal(gradienteLocal);


        }

        private double derivadaSigmoide(double valorFuncao) {

            Sigmoid sigmoide = new Sigmoid();

            double derivadaFuncao = 0.0;

            derivadaFuncao = ( 0.5 * (sigmoide.calcularSaida(valorFuncao)) * (1- sigmoide.calcularSaida(valorFuncao)) );

            return derivadaFuncao;
        }

}
